package edu.nf.ch11.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @author CSY
 * @date 2025 - 04 - 18
 * 回调处理器 - 负责调用目标对象的行为
 */
public class ServiceInvocationHandler implements InvocationHandler {
    /**
     * 目标对象
     */
    private Object target;

    public ServiceInvocationHandler(Object target) {
        this.target = target;
    }
    /**
     * 回调方法，在这个方法中调用目标行为 - 由代理对象去调用
     * proxy - 运行时由JVM动态创建的代理对象
     * method - 目标对象要执行的方法
     * args - 目标对象的方法所需要的参数
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("调用目标方法前");
        //调用目标方法，并接收返回值
        Object returnVal = method.invoke(target, args);
        System.out.println("调用目标方法后");
        return returnVal;
    }
}
